whispercpp gem
MemoryView対応(対応済み)
サンプルとしてのアプリケーションも
サンプリング周波数とかファイルフォーマットとかの調整をRuby(拡張)レベルでやる、とか
マージされた
stream
C++のやつを使ってもいいし、llama_cpp gemと組み合わせてもいい
モデルのダウンロード機能 (対応済み)
whisper.cppのダイナミックリンク
homebrew版は古いし、他のパッケージマネージャーではデフォルトでサポートされてないから急がない
自分でそっち側やれという話はあるけど、まあ、まあ・・・・
Hugging Faceからモデルをダウンロードするユーテリティ(対応済み)
Model::URIのサブクラスか何かで
Context#fullの第二引数(サンプル)として1行n列の二次元配列を受け入れる
__APPLE__とかのマクロを参照してる所があってRubyじゃ取れない
モデルダウンロード機能拡張
content lengthが無い時の対応(対応済み)
レンジリクエスト機能
Rubyからコールバックを登録すると、CとRubyを行ったり来たりするから遅くなってしまう。高速化したい。
そもそも、GVLを解放しながらCを動かすようにするところから?
RubyのブロックをFiberとか使って別に実行とか?
deconstruct_keys
テストでのモデル読み込みや書き起こしを減らす(対応済み)
fullの実行時にコールバックを登録(対応済み)
C++を使っていない箇所を別ファイルに分けたらドキュメンテーションできる?
Params#dup
diarizeの話者をRubyで取りたい
diarizeってステレオ音声だけっぽい。この判定ってどこでやってる? #transcribe? #full?
-> #trunscribe
なのだけれど、現在のRuby実装ではステレオ音声の判定だけして、使ってはいない。つまりdiarizeの設定は意味を持っていない
C++実装でもdiarizeはコアのwhisper.cppの機能ではなくて、examples/mainの機能だった
書き起こしはwhisper.cppでやり、それとは別にステレオ音声を元に話者を識別している
whisper.cppには、ステレオのうち一チャネルのデータだけを渡している
つまり概ね話者が左右に別れて喋っていると看做しているのだな
whisper.cppではtiny_diarizeがtrueじゃないと話者交代を識別しない
これはtdrzが有効なモデルじゃないと使えない
コールバックの実装をもっといい感じにしたい
RB_GC_GUARDが使えるかも